// 知识点1：派生类必须通过类派生列表指出它是从那个基类继承而来的

// 知识点2：派生类必须将其继承来的成员函数中需要覆盖的那些重新声明！！！

// 知识点3：大多数类只继承自一个类，被称作“单继承”，还有其他的类型在P710

// 知识点4：派生类拥有的成员包括自己定义的成员和继承自基类的相关成员，但是这两部分并不一定是连续存储的

// 知识点5：我们可以把派生类的对象当成基类的对象来使用，也可以将基类的指针或引用绑定到派生类对象中的基类部分上

// #include "Quote.h"
// #include <algorithm>
// #include <iostream>
// #include <vector>

// int main() {
//   Quote item;       //基类对象
//   bulk_quote bulk;  //派生类对象
//   Quote *p = &item; // P为一个指针，指向一个Quote类型对象
//   p = &bulk; // p指向的是bulk的Quote部分，也就是派生类的基类部分
//   Quote &r = bulk; // r绑定到bulk的基类部分
// }
// 知识点6：继承的关键：派生类中有基类的对应组成部分

// 知识点7：派生类需要使用基类的构造函数来初始化它的基类部分—每个类控制自己的初始化过程，派生类的构造函数同样是通过构造函数初始化列表将实参传递给基类的构造函数，再由基类的构造函数，完成其基类部分的初始化

// bulk_quote(string& book, double p, size_t n, double
// disc):Quote(book,p),min_qty(n),discount(disc){};//派生类构造函数
// 知识点8：首先初始化基类的部分，然后按照声明的顺序依次初始化派生类的成员

// 知识点9：派生类的作用域嵌套在基类的作用域之内，所以对于一个派生类的成员，其使用派生类成员和积累成员的方式相同—最好使用各自的接口

// 知识点10：若基类中定义了静态成员static，则在整个继承体系中只存在该成员的唯一定义，并且只有一份实例

// 知识点11：派生类的声明只能包含类名，不能包含它的派生列表：一条声明语句的目的是令程序知晓某个名字的存在以及该名字表示一个怎样的实体，派生列表以及其定义的相关细节必须与类的主体一起出现

// 知识点12：若要将一个类当作基类来使用，那么这个类就必须是已经定义过的，仅仅声明是不可以的，因为派生类需要知道其基类到底是什么，所以类不能派生其本身，最终的派生类将包含所有间接类的相关成员

// 知识点13：C++11新标准，防止类被继承可以在其类名后加final，表示其不能作为基类

// (a)错误，类不能继承自本身，见知识点11

// (b)正确

// (c)错误，类的声明中不能包含它的派生列表（感谢评论区的小伙伴指出错误！我知识点总结时漏了这一点！~）
